home *** CD-ROM | disk | FTP | other *** search
- ; 68030er Taktermittlung fuer Falcon, TT
- ; fuer alle Takte zwischen 8 und 50 MHz
- ; Autorin: Natalie Luebke 08.01.96
- ; Verbesserungen: Volker Hemsen 01.06.96
- ; FPU-Messungen: Volker Hemsen, 09.07.96
-
- ANZDIVS EQU 63
- CPU_BASE EQU 16*125
- FPU_BASE EQU 4706
- START EQU $FF
-
- TADR EQU $FFFFFA1F
- TACR EQU $FFFFFA19
- IERA EQU $FFFFFA07
-
- TEXT
- XDEF _get_cpuclock,_get_fpuclock
- ; aus C heraus: extern short get_cpuclock(void);
- ; aus C heraus: extern short get_fpuclock(void);
- _get_cpuclock: clr.w tst_mode
- bra _get_clock
- _get_fpuclock: move.w #1,tst_mode
- _get_clock: movem.l d1-a6,-(sp)
- pea tst_clk(pc)
- move.w #$26,-(sp)
- trap #14
- addq.l #6,sp
- movem.l (sp)+,d1-a6
- rts
-
- tst_clk: move.w SR,old_sr ;SR sichern
- movec CACR,d0 ;Cache-Einstellungen sichern
- move.l d0,old_cacr
- move.b (TADR).w,old_ta_dat ;MFP-Reg sichern
- move.b (TACR).w,old_ta_con
- ;move.b (IERA).w,old_enable
- and.b #$DF,(IERA).w ;Timer A IR sperren
- ori.w #$0700,SR ;alle CPU-IRs sperren
- moveq #0,d2
- moveq #0,d1
- moveq #$0019,d0 ;Cache loeschen, burst & enable
- movec d0,CACR
- cacheloop: move.b #0,(TACR).w ;Timer A stoppen
- move.b #START,(TADR).w ;Startwert einsetzen
- move.b #1,(TACR).w ;Timer starten
- tst.w tst_mode
- bne.s fpu_tstloop
- cpu_tstloop: divu.w #10,d0
- dbra d1,cpu_tstloop
- bra after_tstloop
- fpu_tstloop: fdiv.x #10,fp0
- fdiv.x #10,fp0
- dbra d1,fpu_tstloop
- after_tstloop: clr.b (TACR).w ;Timer stoppen
- moveq #0,d0
- move.b (TADR).w,d0 ;Wert auslesen
- tst.w d2
- bne over
- moveq #1,d2
- move.w #ANZDIVS-1,d1
- moveq #0,d0
- bra cacheloop
- over: move.b old_ta_dat,(TADR).w ;Reg. restaurieren
- move.b old_ta_con,(TACR).w
- ;move.b old_enable,(IERA).w
- move.l old_cacr,d1 ;Cache-Einstellungen zurueck
- movec d1,CACR
- move.w old_sr,d1 ;IR-Masken aus altem SR ...
- andi.w #$0700,d1
- move.w SR,d2 ;... wieder in jetziges ...
- andi.w #$F8FF,d2
- or.w d1,d2
- move.w d2,SR ;... SR setzen
- move.w #START,d3 ;Takt ermitteln
- sub.w d0,d3
- move.l #CPU_BASE,d0
- tst.w tst_mode
- beq.s base_ok
- move.l #FPU_BASE,d0
- base_ok: divu d3,d0
- swap d0
- move.w d0,d1
- clr.w d0
- swap d0
- lsr.w #1,d3
- cmp.w d3,d1
- blt ok
- addq.w #1,d0
- ok: rts
-
- DATA
- tst_mode: dc.w 0
- old_sr: dc.w 0
- old_cacr: dc.w 0
- dc.w 0
- old_ta_con: dc.w 0
- old_ta_dat: dc.w 0
- ;old_enable: dc.w 0
- END
-